//标准输入输出库文件
#include <stdio.h>
//线程文件
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>

pthread_cond_t cond ;//条件变量 
pthread_mutex_t mutex ;//互斥锁

void *task(void *arg)
{
    while(1)
    {
        // 设置等待时间
        struct timespec ts;
        clock_gettime(CLOCK_REALTIME, &ts);  // 获取时间 
        ts.tv_sec += 5; 					 // 时间增加 5 秒 

        //定时等待
        int set = pthread_cond_timedwait(&cond, &mutex, &ts);
        if(set == 0)
        {
            printf("主动唤醒\n");
            while(1)
            {
                //功能代码区
                break;
            }
        }
        else
        {
            printf("超时\n");
            while(1)
            {
                
                //超时任务功能代码区
                //break;
            }
        }
    }

}
    

int main(int argc, char *argv[])
{
    //初始化条件变量与初始化互斥锁
    pthread_cond_init(&cond,NULL);
    pthread_mutex_init(&mutex,NULL);
    //创建线程
    pthread_t tid1;
    pthread_create(&tid1,NULL,task,NULL);
    while(1)
    {
        printf("请输入任意键\n");
        getchar();
        //唤醒线程
        pthread_cond_signal(&cond);
    }
    //销毁条件变量与互斥锁
    pthread_cond_destroy(&cond);
    pthread_mutex_destroy(&mutex);

    return 0;

}